<?php
   /*
    * autor: albert krug
    * stand: 22.12.2012
    * aenderungen: anpassung an neuen vertrag 'jahresvereinbarung'
    */

    class Zend_Controller_Action_Helper_AccountHelper extends Zend_Controller_Action_Helper_Abstract{
        /*
         * identitaet
         */
        private $_identity = null;

        /*
         * tabelleklasse klinik
         */
        private $_clinicTable = null;
        /*
         * ueberprueft das datum 'account_paidtill' in Abhaengigkeit vom accountstatus und aendert es ggf.
         *
         * grundeintrag:  Eintrag bleibt der selbe
         * Komplettpaket: wenn das datum account_paidtill kleiner als das aktuelle datum ist, wird solange 30 tage addiert,
         *                bis das aktuelle datum kleiner ist als account_paidtill
         * gekuendigt:    status komplettpaket bleibt erhalten, bis das atktuelle datum groesser gleich dem datum account_paidtill ist.
         *                danach wird der status auf grundeintrag geschaltet
         * jahresvereinbarung:
         */
        public function updateAccount($clinicNid = NULL){
            //wenn der benutzer eingeloggt ist und sich in der bentuzerverwaltung befindet,
            //kann man auf die sessiondaten von zend_Auth zurueckgreifen
            if(NULL === $clinicNid){
                //beziehe angebmeldetetn benutzer
                if(Zend_Auth::getInstance()->hasIdentity()){
                    $this->_identity = Zend_Auth::getInstance()->getIdentity();
                    $clinicNid = $this->_identity->klinik_nid;
                }
            }

            if(NULL === $clinicNid){
                throw new Exception('Es wurde keine Klinik id übergeben.');
            }

            //beziehe aktuelle benutzerdaten
            $this->_clinicTable = new Model_DbTable_Kliniken();
            $clinicData = $this->_clinicTable->find($clinicNid)->toArray();

            switch($clinicData[0]['klinik_account']){
              //grundeintrag
              case '0':
                  //eintrag bleibt der selbe
                  break;
              //komplettpaket
              case '1':
                  //wenn account_paidtill '0000-00-00' (istDatum ist vor dem 1.1.2011), dann mach nichts
                  //aenderungen zum 22.12.2012:
                  //    monatsvertrag wird nicht mehr verlaengert, da nicht mehr gekuendigt werden kann
                  //    umstellung auf grundeintrag
                  $this->update($clinicData);
                  break;
              //gekuendigt
              case '2':
                  //wenn 30 tage abgelaufen sind status auf grundeintrag aendern
                  //wenn jetztdatum groesser als account_paidtill, wecheln status auf 0(grundeintrag)
                  //aenderungen zum 22.12.2012:
                  //    hier werden keine aenderungen vorgenommen
                  $this->update($clinicData);
                  break;
              //Jahresvereinbarung
              case '3':
                  //aenderungen zum 22.12.2012:
                  //    wenn jahresvereinbarung abgelaufen, setze den account auf den status grundeintrag(1) zurueck
                  $this->update($clinicData);
                  break;
              default:
                  break;
            }
        }

        /*
         * account wird auf Grundeintrag (0) gesetzt und äenderungen gelogged
         */
        private function update($clinicData){
            //wandle datenbankdatum in deutsches datum
            $dateClinicEx = explode('-',$clinicData[0]['account_paidtill']);
            $dateClinicFormated = $dateClinicEx[2].'.'.$dateClinicEx[1].'.'.$dateClinicEx[0];

            $datePaidTill = new Zend_Date($dateClinicFormated, "dd.MM.y");
            $dateLessThan = new Zend_Validate_DateLessThan($datePaidTill);
            if(!$dateLessThan->isValid(Zend_Registry::get('istDatum'))){
                $this->_clinicTable->update(array('klinik_account' => '0'),'klinik_nid = '.$clinicData[0]['klinik_nid']);
                $this->log($clinicData[0]['klinik_nid']);
            }
        }

        /*
         * logged statusaenderung in logtabelle
         *
         * $clinicData
         */
        private function log($clinicNid){
             //in historientabelle werden alle eintraege gelogged
            $accountHistoryTable = new Model_DbTable_AccountHistorie();
            //beziehe klinikdaten
            $clinicData = $this->_clinicTable->find($clinicNid)->toArray();
            //fuege eintrag in logtabelle hinzu
            $accountHistoryTable->insert(array('klinik_nid'       => $clinicData[0]['klinik_nid'],
                                               'klinik_account'   => $clinicData[0]['klinik_account'],
                                               'account_paidtill' => $clinicData[0]['account_paidtill']));
        }

        /*
         * $era - Anzahl von tagen
         *
         * wenn jetztdatum groesser dem bezahltbisdatum, dann wird bezahltbisdatum um uebergebene anzahl von tagen verlaengert
         *
         * aenderungen zum 22.12.2012: funktion wird nicht mehr benoetigt, da vertraege nicht verlaengert werden
         *
         */
//        private function update($era = 365, $clinicData, $dateClinicFormated){
//          $clinicTable = new Model_DbTable_Kliniken();
//          //erstelle dateobjekt mit jetzigem datum im format dd.MM.yyyy
//            $date = new Zend_Date($dateClinicFormated, 'dd.MM.y');
//          //in historientabelle werden alle eintraege gelogged
//          $accountHistoryTable = new Model_DbTable_AccountHistorie();
//          //wenn jetztdatum groesser account_paidtill, dann account_paidtill +30 tage bis jetztdatum kleiner account_paidtill
//          $dateGreaterThan = new Zend_Validate_DateGreaterThan($date);
//          while($dateGreaterThan->isValid(Zend_Registry::get('istDatum'))){
//              //addiere uebergebene zahl von tagen
//              $date->add($era, Zend_Date::DAY);
//              //wandle deutsches datum in datenbankdatum
//              $dateStringEx = $date->toArray();
//              $dateString = $dateStringEx['year'].'-'.$dateStringEx['month'].'-'.$dateStringEx['day'];
//              //update des klinikstatus
//              $clinicTable->update(array('account_paidtill' => $dateString),'klinik_nid = '.$clinicData[0]['klinik_nid']);
//              //aktualisiere clinicddata
//              $clinicData = $clinicTable->find($clinicData[0]['klinik_nid'])->toArray();
//              //fuege eintrag in logtabelle hinzu
//              $accountHistoryTable->insert(array('klinik_nid'       => $clinicData[0]['klinik_nid'],
//                                                 'klinik_account'   => $clinicData[0]['klinik_account'],
//                                                 'account_paidtill' => $clinicData[0]['account_paidtill']));
//          }
//        }
    }